package cn.tedu.spring.life;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * 完整的生命周期
 * 1.实例化阶段（bean对象创建）
 *  在这个阶段中，IoC容器会创建一个Bean的实例，并为其分配空间。这个过程可以通过 构造方法 完成。
 * 2.属性赋值阶段
 *  在实例化完Bean之后，容器会把Bean中的属性值注入到Bean中，这个过程可以通过 set方法 完成。
 * 3.初始化阶段（bean对象初始化）
 *  在属性注入完成后，容器会对Bean进行一些初始化操作；
 * 4.使用阶段
 *  初始化完成后，Bean就可以被容器使用了
 * 5.销毁阶段
 *  容器在关闭时会对所有的Bean进行销毁操作，释放资源。
 */
@Component
public class Life {
    private String lifeTime;

    //构造方法
    public Life() {
        System.out.println("1:实例化[构造方法]");
    }

    //set方法
    @Value("青壮年")
    public void setLifeTime(String lifeTime) {
        this.lifeTime = lifeTime;
        System.out.println("2:属性赋值[set方法]");
    }

    //初始化的方法

    /**
     * @PostConstruct:生命周期初始化方法,在Bean对象实例化后执行此操作
     */
    @PostConstruct
    public void init(){
        System.out.println("3:初始化方法执行");
    }

    /**
     * @PreDestroy注解:生命周期销毁方法,在IoC容器关闭之前,需要执行的方法
     */
    @PreDestroy
    public void destroy(){
        System.out.println("5.销毁阶段:销毁之前需要执行的操作");
    }
}
